﻿namespace CSharpPro._1106;

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

public class UserService : IUserService
{
    private List<User1> _users;
    private int _nextId; // 用于生成自增 Id

    public List<User1> Users => _users;

    public UserService()
    {
        // 初始化预设用户（指定 Id=1）
        _users = new List<User1>
        {
            new User1(1, "zkw", "Zkw20051222")
        };
        _nextId = 2; // 下一个注册用户的 Id 从 2 开始
    }

    public void RunUserSystem()
    {
        bool isRunning = true;
        while (isRunning)
        {
            ShowMainMenu();
            string choice = Console.ReadLine()?.Trim() ?? string.Empty;

            switch (choice)
            {
                case "1":
                    HandleLogin();
                    break;
                case "2":
                    HandleRegister();
                    break;
                case "3":
                    isRunning = false;
                    Console.WriteLine("系统已退出，感谢使用！");
                    break;
                case "4":
                    HandleDeleteUser(); // 新增删除用户的处理方法
                    break;
                default:
                    Console.WriteLine("请输入有效数字（1-3）");
                    WaitForKey();
                    break;
            }
        }
    }

    // 登录逻辑（仍按用户名+密码验证，Id 用于后台标识）
    public bool Login(string username, string password)
    {
        var user = _users.Find(u => u.Username == username);
        if (user == null) return false;
        return user.Password == password;
    }

    // 注册逻辑（自动生成自增 Id）
    public bool Register(string username, string password, string confirmPassword)
    {
        // 校验用户名
        if (string.IsNullOrEmpty(username) || 
            username.Length < 3 || username.Length > 15 || 
            !Regex.IsMatch(username, @"^[a-zA-Z0-9_]+$") || 
            _users.Exists(u => u.Username == username))
        {
            return false;
        }

        // 校验密码
        if (string.IsNullOrEmpty(password) || 
            password.Length < 6 || password.Length > 20 || 
            !Regex.IsMatch(password, @"[A-Z]") || 
            !Regex.IsMatch(password, @"[a-z]") || 
            !Regex.IsMatch(password, @"[0-9]"))
        {
            return false;
        }

        // 确认密码
        if (password != confirmPassword)
        {
            return false;
        }

        // 新增用户时自动分配 Id
        _users.Add(new User1(_nextId, username, password));
        _nextId++; // 自增 Id 递增
        return true;
    }

    // 使用 foreach 迭代所有用户（含 Id 展示）
    public void PrintAllUsers()
    {
        Console.WriteLine("\n===== 所有用户列表 =====");
        foreach (var user in _users)
        {
            Console.WriteLine($"Id: {user.Id}, 用户名: {user.Username}");
        }
    }

    // 使用 for 循环删除用户（按 Id 删除）
    public void DeleteUserById(int id)
    {
        for (int i = 0; i < _users.Count; i++)
        {
            if (_users[i].Id == id)
            {
                _users.RemoveAt(i);
                Console.WriteLine($"已删除 Id 为 {id} 的用户");
                return;
            }
        }
        Console.WriteLine($"未找到 Id 为 {id} 的用户");
    }

    private void HandleLogin()
    {
        Console.Clear();
        Console.WriteLine("===== 用户登录 =====");

        Console.Write("请输入用户名：");
        string username = Console.ReadLine()?.Trim() ?? string.Empty;

        Console.Write("请输入密码：");
        string password = Console.ReadLine() ?? string.Empty;

        if (Login(username, password))
        {
            // 登录成功时可获取用户 Id
            var user = _users.Find(u => u.Username == username);
            Console.WriteLine($"登录成功！用户 Id: {user.Id}，欢迎您，{username}！");
            Console.WriteLine("已进入系统首页（模拟）");
        }
        else
        {
            Console.WriteLine("登录失败：用户名不存在或密码错误");
        }
        WaitForKey();
    }

    private void HandleRegister()
    {
        Console.Clear();
        Console.WriteLine("===== 用户注册 =====");

        Console.Write("请输入用户名（3-15个字符，含字母、数字、下划线）：");
        string username = Console.ReadLine()?.Trim() ?? string.Empty;

        Console.Write("请输入密码（6-20个字符，含大小写字母和数字）：");
        string password = Console.ReadLine() ?? string.Empty;

        Console.Write("请确认密码：");
        string confirmPassword = Console.ReadLine() ?? string.Empty;

        if (Register(username, password, confirmPassword))
        {
            // 注册成功时提示用户 Id
            var newUser = _users.Find(u => u.Username == username);
            Console.WriteLine($"注册成功！您的用户 Id 是：{newUser.Id}，即将返回主菜单...");
        }
        else
        {
            Console.WriteLine("注册失败：信息不符合要求或用户名已存在");
        }
        WaitForKey();
    }
    private void HandleDeleteUser()
    {
        Console.Clear();
        Console.WriteLine("===== 删除用户 =====");

        // 先展示所有用户，方便选择要删除的ID
        PrintAllUsers();

        Console.Write("请输入要删除的用户Id：");
        if (int.TryParse(Console.ReadLine(), out int id))
        {
            DeleteUserById(id);
        }
        else
        {
            Console.WriteLine("请输入有效的数字Id");
        }
        WaitForKey();
    }

    private void ShowMainMenu()
    {
        Console.Clear();
        Console.WriteLine("===== 用户系统 =====");
        Console.WriteLine("1. 登录");
        Console.WriteLine("2. 注册");
        Console.WriteLine("3. 退出");
        Console.WriteLine("4. 删除用户"); // 新增删除选项
        Console.Write("请选择功能（1-4）：");
    }
    private void WaitForKey()
    {
        Console.WriteLine("按任意键继续...");
        Console.ReadKey();
    }
}